package main
import (
	"fmt"
	"strconv"
	"strings"
)

func main(){
	//1. 统计字符串长度 (按字节长度)
	str := "hello world"
	fmt.Println("string's length : ", len(str))

	//2. 字符串遍历同时处理含有中文问题 : r := []rune(str)
	str = "hello 北京"
	r := []rune(str)  //转换成rune切片~
	for i := 0;i < len(r);i++{
		fmt.Printf("str -> %c\n",r[i])
	}

	//3. 字符串转换成整数： n,err = strconv.Atoi("12")
	n,err := strconv.Atoi("12")
	if err != nil{
		fmt.Println("转换出错 : ",err)
	}else{
		fmt.Printf("转换成功：%d --- Type:%T\n",n,n)
	}

	//4. 整数转换成字符串 str = strconv.Itoa(123123)
	str = strconv.Itoa(123123)
	fmt.Printf("转换成功：%s --- Type:%T\n",str,str)

	//5. 字符串转换成 []byte ： var bytes = []byte("hello golang")
	var bytes = []byte("hello golang")
	fmt.Println("转换结果 : ",bytes) //字节数组

	//6. []byte 转换成字符串 str = string([]byte{97,98,99})
	str = string([]byte{97,98,99})
	fmt.Println("转换结果 : ",str)

	//7. 十进制转换成对应的2、8、16进制
	str = strconv.FormatInt(36,2)  //将10进制 36 -> 2进制
	fmt.Println("转换结果 : ",str)
	str = strconv.FormatInt(36,8)  //将10进制 36 -> 8进制
	fmt.Println("转换结果 : ",str)

	//8. 查找子串里面是否含有***子串 strings.Contains("seafood","foo") // true
	b := strings.Contains("seafood","foo") 
	fmt.Println("查找结果 : ",b)

	//9. 统计字符串中有多少个指定的子串：strings.Count("ceese","e") //3
	n = strings.Count("ceese","e")
	fmt.Println("统计结果 : ",n)

	//10. 不区分大小写的字符串比较用【strings.EqualFold("abc","Abc")】 区分大小写就用【"abc" == "Abc"】 
	fmt.Println("strings.EqualFold(\"abc\",\"Abc\")比较结果结果 : ",strings.EqualFold("abc","Abc"))
	fmt.Println("\"abc\" == \"Abc\"比较结果 : ",("abc" == "Abc"))

	//11. 返回子串在字符串里第一次出现的index值，如果没有返回 -1 ; strings.Index("saksjdklasd","jd")
	fmt.Println("子串第一次出现在index = ",strings.Index("saksjdklasd","jd"))

	//12. 返回子串在字符串里最后一次出现的index值，如果没有返回 -1 ; strings.LastIndex("saksjdklasd","jd")
	fmt.Println("子串最后一次出现在index = ",strings.LastIndex("sajdksjdklasd","jd"))

	//13. 将字符串某子串替换成另一个子串 strings.Replace("go golang go go go!","go","P",1) //最后的int参数是指明要换多少个，-1为全部替换
	str = strings.Replace("go golang go go go!","go","P",-1)
	fmt.Println("替换结果 : ",str)

	//14. 按照指定的某个字符作为分割标识，将一个字符串拆分成字符串数组  ： strings.Split("hello world","")
	strarr := strings.Split("hello world","")
	fmt.Println("分割结果 : ",strarr)

	//15. 字符串大小写转换 ： strings.ToLower("golang") strings.ToUpper("golang") 
	fmt.Println("转换结果 : ",strings.ToLower("golang"))
	fmt.Println("转换结果 : ",strings.ToUpper("golang"))
	
	//16. 将字符串左右两边空格去除 strings.TrimSpace(" hello world  ")  | 去掉指定字符 strings.Trim("!  hello ! ","! ")  TrimLeft/TrimRight左右去除也行
	fmt.Printf("转换结果 : %q\n",strings.TrimSpace(" hello world  "))
	fmt.Printf("转换结果 : %q\n",strings.Trim("!  hello ! ","! "))

	//17. 判断是否以指定的字符串开头或结束 ： strings.HasPrefix("https://www.baidu.com","https") | strings.HasSuffix("abc.go","go")
	fmt.Println("判断结果： ",strings.HasPrefix("https://www.baidu.com","https"))
	fmt.Println("判断结果： ",strings.HasSuffix("abc.go","go"))
}